package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import play.db.DB;

import models.Turma;
import models.TurmaAula;
import utils.exceptions.BDException;


public class TurmaDAO {
	Connection conexao;
	
	public TurmaDAO() {
		conexao = DB.getConnection();
	}

	public boolean cadastrarTurma(Turma _turma) throws BDException {
		boolean retorno = false;
		
		String comando = "insert into turma (codTurma, dataInicio, dataFim)"+
		"values(?,?,?)";
	
		try {
			PreparedStatement p = this.conexao.prepareStatement(comando);
			
			p.setString(1, _turma.getCodigo());
			p.setDate(2, _turma.getDataInicio());
			p.setDate(3, _turma.getDataFim());
	
			p.execute();
			
			retorno = true;
		} catch (SQLException e) {
			
			throw new BDException("Ocorreu ao INSERIR a Turma.",e.getStackTrace());
		}
		
		return retorno;
	}
	
	public boolean cadastrarTurmaAula(TurmaAula _turma) throws BDException {
		boolean retorno = false;
		
		String comando = "insert into aula_tem_turma (idAula, idTurma, codDisc)"+
		"values(?,?,?)";
	
		try {
			PreparedStatement p = this.conexao.prepareStatement(comando);
			
			p.setLong(1, _turma.getIdAula());
			p.setLong(2, _turma.getIdTurma());
			p.setString(3, _turma.getCodDisc());
	
			p.execute();
			
			retorno = true;
		} catch (SQLException e) {
			
			throw new BDException("Ocorreu ao INSERIR a Turma.",e.getStackTrace());
		}
		
		return retorno;
	}
	
	public boolean editarTurma(Turma _turma) throws BDException{
		boolean retorno = false;

		String comando = "update turma set dataInicio=?, dataFim=? where codTurma=?;";

		try {
			PreparedStatement p = this.conexao.prepareStatement(comando);

			p.setDate(1, _turma.getDataInicio());
			p.setDate(2, _turma.getDataFim());
			p.setString(3, _turma.getCodigo());
			
			p.execute();

			retorno = true;
		} catch (SQLException e) {
			
			throw new BDException("Ocorreu ao EDITAR a Turma.",e.getStackTrace());
		}

		return retorno;
	}

	public List<Turma> listarTodos() throws BDException {
		List<Turma> retorno = new ArrayList<Turma>();
		
		String comando = "select * from turma";
		
		try {
			java.sql.Statement start = conexao.createStatement();
			ResultSet rs = start.executeQuery(comando);
			
			while(rs.next()){
				Turma turma = new Turma();
				
				turma.setCodigo(rs.getString("codTurma"));
				turma.setDataInicio(rs.getDate("dataInicio"));
				turma.setDataFim(rs.getDate("dataFim"));
			
				retorno.add(turma);
			}
		} catch (SQLException e) {
			
			throw new BDException("Ocorreu ao LISTAR as Turmas",e.getStackTrace());
		}
		
		return retorno;
	}

	public boolean excluirTurma(String _idTurma) throws BDException {
		boolean retorno = false;

		String comando = "delete from turma where codTurma=?;";
		try {
			PreparedStatement p = this.conexao.prepareStatement(comando);
			p.setString(1, _idTurma);

			p.execute();

			retorno = true;
		} catch (SQLException e) {
			
			throw new BDException("Ocorreu ao EXCLUIR a Turma.",e.getStackTrace());
		}

		return retorno;
	}

	public Turma buscarTurma (String idTurma) throws BDException {
		String comando = "select * from turma where codTurma='"+idTurma+"'";
		
		java.sql.Statement start;
		
		try {
			start = conexao.createStatement();
			ResultSet rs = start.executeQuery(comando);
			
			while(rs.next()){
				Turma turma = new Turma();
				
				turma.setCodigo(rs.getString("codTurma"));
				turma.setDataInicio(rs.getDate("dataInicio"));
				turma.setDataFim(rs.getDate("dataFim"));
			
				return turma;
			}
			
		} catch (SQLException e) {
			
			throw new BDException("Ocorreu ao BUSCAR uma Turma.",e.getStackTrace());
		}
		return null;
	}


}